package com.example.wechat.login.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.wechat.login.dto.speech.SpeechRecognitionResponse;
import com.example.wechat.login.dto.speech.SpeechTaskResponse;
import com.example.wechat.login.entity.SpeechRecognitionHistory;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 语音识别历史记录服务接口
 */
public interface SpeechRecognitionHistoryService {

    /**
     * 保存语音识别历史记录
     *
     * @param openid 用户openid
     * @param response 语音识别响应
     * @param audioFile 音频文件
     * @return 保存的历史记录
     */
    SpeechRecognitionHistory saveHistory(String openid, String taskId,String requestId, MultipartFile audioFile);


    /**
     * 保存音频文件
     *
     * @param file 音频文件
     * @param filename 文件名
     * @return 文件路径
     * @throws IOException 如果保存文件失败
     */
    String saveAudioFile(MultipartFile file, String filename) throws IOException;

    /**
     * 识别音频
     *
     * @param file 音频文件
     * @param engineType 引擎类型
     * @return 识别结果
     * @throws IOException 如果处理文件失败
     */
    SpeechRecognitionResponse recognizeAudio(MultipartFile file, String engineType) throws IOException;

    /**
     * 统计用户历史记录数量
     *
     * @param openid 用户openid
     * @return 历史记录数量
     */
    long countByOpenid(String openid);

    /**
     * 根据ID查询历史记录
     *
     * @param id 历史记录ID
     * @return 历史记录
     */
    SpeechRecognitionHistory findById(Long id);

    /**
     * 根据openid查询历史记录列表
     *
     * @param openid 用户openid
     * @return 历史记录列表
     */
    List<SpeechRecognitionHistory> findByOpenid(String openid);


    /**
     * 根据openid查询历史记录列表
     *
     * @param taskId 任务ID
     * @return 历史记录列表
     */
    SpeechRecognitionHistory findByTaskId(String taskId);

    /**
     * 根据requestId查询历史记录列表
     *
     * @param requestId 请求id
     * @return 历史记录列表
     */
    SpeechRecognitionHistory findByRequestId(String requestId);

    /**
     * 根据openid和时间范围查询历史记录
     *
     * @param openid 用户openid
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 历史记录列表
     */
    List<SpeechRecognitionHistory> findByOpenidAndTimeRange(String openid, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据openid和音频格式查询历史记录
     *
     * @param openid 用户openid
     * @param audioFormat 音频格式
     * @return 历史记录列表
     */
    List<SpeechRecognitionHistory> findByOpenidAndAudioFormat(String openid, String audioFormat);

    /**
     * 根据openid和引擎类型查询历史记录
     *
     * @param openid 用户openid
     * @param engineType 引擎类型
     * @return 历史记录列表
     */
    List<SpeechRecognitionHistory> findByOpenidAndEngineType(String openid, String engineType);

    /**
     * 删除历史记录
     *
     * @param id 历史记录ID
     */
    void deleteById(Long id);

    /**
     * 删除指定openid的所有历史记录
     *
     * @param openid 用户openid
     */
    void deleteByOpenid(String openid);

    /**
     * 删除指定openid和时间范围内的历史记录
     *
     * @param openid 用户openid
     * @param startTime 开始时间
     * @param endTime 结束时间
     */
    void deleteByOpenidAndTimeRange(String openid, LocalDateTime startTime, LocalDateTime endTime);


    /**
     * 更新任务
     */
    Integer updateTask(SpeechTaskResponse updatedTask);

    void update(SpeechRecognitionHistory task);
}
